{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 调参过程 发现 n_estimators = 70 效果最好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "mean_squared_error: 0.021167794248658774\n",
      "score: 0.9792709931042887\n",
      "time used 0 s\n",
      "--------------n_estimators=20------done---------------\n",
      "mean_squared_error: 0.021434761624916733\n",
      "score: 0.9790150458646837\n",
      "time used 0 s\n",
      "--------------n_estimators=30------done---------------\n",
      "mean_squared_error: 0.02104546733031643\n",
      "score: 0.979388315208584\n",
      "time used 0 s\n",
      "--------------n_estimators=40------done---------------\n",
      "mean_squared_error: 0.01997257585768881\n",
      "score: 0.9804185168009111\n",
      "time used 0 s\n",
      "--------------n_estimators=50------done---------------\n",
      "mean_squared_error: 0.020059550529242628\n",
      "score: 0.980334922094661\n",
      "time used 0 s\n",
      "--------------n_estimators=60------done---------------\n",
      "mean_squared_error: 0.019264161154720558\n",
      "score: 0.9810999327859263\n",
      "time used 0 s\n",
      "--------------n_estimators=70------done---------------\n",
      "mean_squared_error: 0.019365792813375124\n",
      "score: 0.9810021162668929\n",
      "time used 1 s\n",
      "--------------n_estimators=80------done---------------\n",
      "mean_squared_error: 0.0193578212362632\n",
      "score: 0.9810097878949059\n",
      "time used 1 s\n",
      "--------------n_estimators=90------done---------------\n",
      "mean_squared_error: 0.019457489249304474\n",
      "score: 0.9809138787497336\n",
      "time used 1 s\n",
      "--------------n_estimators=100------done---------------\n",
      "mean_squared_error: 0.01949559381345599\n",
      "score: 0.9808772162118601\n",
      "time used 1 s\n",
      "--------------n_estimators=110------done---------------\n",
      "mean_squared_error: 0.01994557873922346\n",
      "score: 0.9804444676706392\n",
      "time used 1 s\n",
      "--------------n_estimators=120------done---------------\n",
      "mean_squared_error: 0.02019775232655073\n",
      "score: 0.9802021203433453\n",
      "time used 1 s\n",
      "--------------n_estimators=130------done---------------\n",
      "mean_squared_error: 0.020054993524052548\n",
      "score: 0.9803393016539557\n",
      "time used 1 s\n",
      "--------------n_estimators=140------done---------------\n",
      "mean_squared_error: 0.020227232218093315\n",
      "score: 0.9801737969941098\n",
      "time used 2 s\n",
      "--------------n_estimators=150------done---------------\n",
      "mean_squared_error: 0.020204774888778084\n",
      "score: 0.9801953731387104\n",
      "time used 2 s\n",
      "--------------n_estimators=160------done---------------\n",
      "mean_squared_error: 0.01983847867730823\n",
      "score: 0.9805474307038915\n",
      "time used 2 s\n",
      "--------------n_estimators=200------done---------------\n",
      "everything has done\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 2. Import libraries and modules\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import preprocessing\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.pipeline import make_pipeline\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import mean_squared_error, r2_score\n",
    "from sklearn.externals import joblib \n",
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "train_data = pd.read_csv('./data/public.train.csv')\n",
    "test_data = pd.read_csv('./data/public.test.csv')\n",
    "\n",
    "# 4. Split data into training and test sets\n",
    "y = train_data['发电量']\n",
    "X = train_data.drop(['发电量','ID'], axis=1)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=123, \n",
    "                                                   )\n",
    "\n",
    "\n",
    "# clf = RandomForestClassifier(n_estimators= 10 ,\n",
    "#                                  random_state=0,\n",
    "#                                  max_depth=None,\n",
    "#                                  max_features=sqrt)\n",
    "scores = []\n",
    "# for nt in [10, 20, 40, 80, 120, 160, 200, 300, 400, 500, 600, 700, 800]:\n",
    "for nt in [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 200]:\n",
    "    t1 = time.time()\n",
    "    forest = RandomForestRegressor(n_estimators=nt, random_state=123, max_features='sqrt',max_depth=None)\n",
    "    forest.fit(X_train, y_train)\n",
    "    pred = forest.predict(X_test)    \n",
    "    print (\"mean_squared_error:\",mean_squared_error(y_test, pred))\n",
    "    rmse = mean_squared_error(y_test, pred)\n",
    "    score = np.divide(1,1+rmse)\n",
    "    scores.append(score)\n",
    "    print(\"score:\",score)\n",
    "    t2 = time.time() \n",
    "    print('time used %d s' % (t2-t1))\n",
    "    print(\"--------------n_estimators=%d------done---------------\"% nt)\n",
    "print('everything has done')\n",
    "\n",
    "x1 = np.arange(16) \n",
    "y1 = scores\n",
    "plt.plot(x1,y1,label='Frist line',linewidth=3,color='r',marker='o', \n",
    "markerfacecolor='blue',markersize=12) \n",
    "# plt.plot(x2,y2,label='second line') \n",
    "# plt.xlabel('Plot Number') \n",
    "# plt.ylabel('Important var') \n",
    "# plt.title('Interesting Graph\\nCheck it out') \n",
    "# plt.legend() \n",
    "plt.show() \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### LGBM调参\n",
    "#### learning_rate=0.9最好\n",
    "#### n_estimators= 720\n",
    "#### max_depth=3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=0------done---------------\n",
      "rmes: 0.17441372685100054\n",
      "score: 0.970477917993226\n",
      "time used 0 s\n",
      "--------------n_estimators=1------done---------------\n",
      "rmes: 0.16967440230530972\n",
      "score: 0.972016233138313\n",
      "time used 0 s\n",
      "--------------n_estimators=2------done---------------\n",
      "rmes: 0.16671839075443953\n",
      "score: 0.9729566487229663\n",
      "time used 0 s\n",
      "--------------n_estimators=3------done---------------\n",
      "rmes: 0.17635221771222892\n",
      "score: 0.9698379385759924\n",
      "time used 0 s\n",
      "--------------n_estimators=4------done---------------\n",
      "rmes: 0.18481258366549705\n",
      "score: 0.9669723897710125\n",
      "time used 0 s\n",
      "--------------n_estimators=5------done---------------\n",
      "rmes: 0.19077986878105252\n",
      "score: 0.964881257090247\n",
      "time used 0 s\n",
      "--------------n_estimators=6------done---------------\n",
      "rmes: 0.17265444866763127\n",
      "score: 0.9710533288465932\n",
      "time used 0 s\n",
      "--------------n_estimators=7------done---------------\n",
      "rmes: 0.18140808335808992\n",
      "score: 0.9681395978483749\n",
      "time used 0 s\n",
      "--------------n_estimators=8------done---------------\n",
      "rmes: 0.19360586309299024\n",
      "score: 0.9638710013501718\n",
      "time used 0 s\n",
      "--------------n_estimators=9------done---------------\n",
      "rmes: 0.1870223942428342\n",
      "score: 0.9662046951352214\n",
      "time used 0 s\n",
      "--------------n_estimators=10------done---------------\n",
      "rmes: 0.18919731608760454\n",
      "score: 0.9654414214821786\n",
      "time used 0 s\n",
      "--------------n_estimators=11------done---------------\n",
      "rmes: 0.1852367262205775\n",
      "score: 0.9668256547810917\n",
      "time used 0 s\n",
      "--------------n_estimators=12------done---------------\n",
      "rmes: 0.18864834672621167\n",
      "score: 0.965634796952656\n",
      "time used 0 s\n",
      "--------------n_estimators=13------done---------------\n",
      "rmes: 0.18231393450182182\n",
      "score: 0.9678308784732986\n",
      "time used 0 s\n",
      "--------------n_estimators=14------done---------------\n",
      "rmes: 0.18540641495272092\n",
      "score: 0.9667668681061069\n",
      "time used 0 s\n",
      "--------------n_estimators=15------done---------------\n",
      "rmes: 0.18191132325380413\n",
      "score: 0.9679682562718118\n",
      "time used 0 s\n",
      "--------------n_estimators=16------done---------------\n",
      "rmes: 0.18269796169575458\n",
      "score: 0.9676995953103787\n",
      "time used 0 s\n",
      "--------------n_estimators=17------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=18------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=19------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=20------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=21------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=22------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=23------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=24------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=25------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=26------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=27------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=28------done---------------\n",
      "rmes: 0.18270440235106647\n",
      "score: 0.9676973914628754\n",
      "time used 0 s\n",
      "--------------n_estimators=29------done---------------\n",
      "everything has done\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 2. Import libraries and modules\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import preprocessing\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.pipeline import make_pipeline\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import mean_squared_error, r2_score\n",
    "from sklearn.externals import joblib \n",
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "import lightgbm as lgb \n",
    "\n",
    "# train_data = pd.read_csv('./data/public.train.csv')\n",
    "# test_data = pd.read_csv('./data/public.test.csv')\n",
    "train_data = pd.read_csv('./McDonald_data/cleaned_train_data.csv')\n",
    "test_data = pd.read_csv('./McDonald_data/cleaned_test_data.csv')\n",
    "# 4. Split data into training and test sets\n",
    "y = train_data['发电量']\n",
    "X = train_data.drop(['发电量','ID'], axis=1)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=123, \n",
    "                                                   )\n",
    "\n",
    "\n",
    "# clf = RandomForestClassifier(n_estimators= 10 ,\n",
    "#                                  random_state=0,\n",
    "#                                  max_depth=None,\n",
    "#                                  max_features=sqrt)\n",
    "scores = []\n",
    "# array = [10, 20, 40, 80, 120, 160, 200, 300, 400, 500, 600, 700, 800]:\n",
    "# array =[0.1,0.99,0.98,0.97,0.96,0.95,0.94,0.93,0.92,0.91,0.09,0.08,0.07,0.06,0.05,0.04,0.03,0.02,0.01] \n",
    "# array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,30]\n",
    "array = np.arange(30)\n",
    "for nt in array:\n",
    "    t1 = time.time()\n",
    "    estimator = lgb.LGBMRegressor(boosting_type='gbdt',\n",
    "                               n_estimators=720,\n",
    "                               silent=True,\n",
    "                               learning_rate=0.8,\n",
    "                              max_depth=nt)\n",
    "    estimator.fit(X_train, y_train)\n",
    "    pred = estimator.predict(X_test)  \n",
    "    rmes = math.sqrt(mean_squared_error(y_test, pred))\n",
    "    print (\"rmes:\",rmes)\n",
    "    rmse = mean_squared_error(y_test, pred)\n",
    "    score = np.divide(1,1+rmse)\n",
    "    scores.append(score)\n",
    "    print(\"score:\",score)\n",
    "    t2 = time.time() \n",
    "    print('time used %d s' % (t2-t1))\n",
    "    print(\"--------------n_estimators=%d------done---------------\"% nt)\n",
    "print('everything has done')\n",
    "\n",
    "x1 = np.arange(len(array)) \n",
    "y1 = scores\n",
    "plt.plot(x1,y1,label='Frist line',linewidth=1,color='r',marker='o', \n",
    "markerfacecolor='blue',markersize=8)\n",
    "# plt.axis([0,30000,0,1])\n",
    "# plt.plot(x2,y2,label='second line') \n",
    "# plt.xlabel('Plot Number') \n",
    "# plt.ylabel('Important var') \n",
    "# plt.title('Interesting Graph\\nCheck it out') \n",
    "# plt.legend() \n",
    "plt.show() \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.08"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "array[11]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcEAAAExCAYAAAAEKRnxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XecXFXdx/HPd9N7gTRqgpRAABECEiRUA4iiFBHBhg1FEVEQKaEjiEovD+CjBvKANAUFpColtECiSA8lCSUhBdLb1t/zxzmzc2d2ys5mdrb93ryGmXvvufeeOzuZ35xzT5GZ4ZxzznVFVW2dAeecc66teBB0zjnXZXkQdM4512V5EHTOOddleRB0zjnXZXkQdM4512V5EHTOdVmSpkgySee2dV5c2+je1hlwrqUkdQe+DnwV+CSwAbAaWADMBp4E/mVmL7RZJp1z7ZoHQdchSRoG/AMYn1i9DhCwDTAWOBhYDgyueAadcx2CV4e6jur/CAFwJXAqMMrM+pjZYGAQMAm4DljWdll0zrV3XhJ0HY6kscABcfE7ZnZXcruZrQQeBR6VdEql8+ec6zi8JOg6oh0Sr+8rlNDM1ubbJunTku6VtETSKkkvSvqppKp8DSYkHRvXP17guOfGNFNybNtC0smS/ilpjqR1kpZJei6u75PnmBnnlfQ1SU9I+jiuPzQrfX9JZ0h6QdLyeJ63JF0ladNC71me84+O57G4vL2k2yQtiMd+Q9JZknoW2zfP8feJaebm2DY3bttH0ihJ10t6X9JaSa9L+pmkqkT6IyVNi+/rCkn3S9q+GdfYW9J58VrWSlok6c+Sti6yX09JJ8RzLpFULeldSX+UtG2efRo/X5J6STpT0kuSVsb1g2O6qvi3fyz+rWslLZb0ajz+QcWuyxVhZv7wR4d6AEcCFh+faOExvgrUJY6zFKiNr+8Cboqvz83a79i4/vECxz43ppmSY9uMxDkb4nkbEuteAAbk2K/xvMBV8XU9sCQ+H5pIuy0wN3HMWmBVYnkJ8JkS36/Rif0PANbE18vi+VPb7im0b4Hj7xPTzM2xLXUt3wY+jK+XZ/39ro5pfx2X64AVWX/frXIce0rcfjHwbHxdHY+f2nc1sFeefI8CXkykrc8671rg8ALn/TUwPb6uie+nAYNjulsSx0q939WJ5efa+t9jR394SdB1RDMTr6+NjWSaTdIngD8B3YCHCYF0COFe4snAocCXypTXbP8BTgK2BHrH8/YBvgi8SbjP+esC++8CnACcA2xgZkOBIcAzAJIGERoMbQ7cA+wM9DGz/sAYYGpM/5dUaaMFbgfuBcZYuAc7EDid8KX8JUkHt/C4xVwOzAE+aWaD4nnPitt+LOkM4OeE93eQmQ0k1BrMIjSO+lWBYx8P7Ah8C+gfj/8p4N9AX+AOSUOSO0jqAfyN0DL5SWAvwns9EBgJXAr0BqbGz1wuPwa2Jvwo6x/fz9HAakl7AccQfiT9DBgYt/cGNiL8MHqqwDW55mjrKOwPf7TkQbqklvrl/ihwISF4DSuy7x/ifm8QAlH29smJY5+bte1Y1qMkWCRfWxBKbauBvnnOa8BFBY5xYUxzD6A8ae6PaU4pIW+jE+d/ONexCYHRgD/m27fA8feheElwCbGElLX9n4m8nZ1j+8S4bR3QM2vblMS+X8ux74bAR3H75Kxt34vrnwd65bmu62Kaawqc94A8+54atz/Q2v+euvLDS4Kuo/o+cBmhCqknsD9wJuHLf5Gk5+N9MyV3isuHx8XLzWxdjmNfQajuqygzmw28Sih57JQnWT3huvP5Vny+3OI3aQ5/js+TSs5k8Os8x74nPhe9/9ZC15tZrta+j8bnGnK/N08TAmAvQgk8l3eBW7NXmtlHwA1x8ctZm1Pv9bVmVp3nuKlj5nuvXzKzh/NsWxGfhyfvebry8jfWdUhmVmNmJwObAj8kfLG/RfjlDLAroRvF7VlfIFuQ7jf4RJ5jryKzyrWsJE2KDS7ekbQm1WgkNhz5ZEy2UZ7d345fzLmOuymwSVy8MzZaafIg3FOE8N61RL7BB+bF5yF5tq+vl/OsXxSf58a/XQYzayCU5iB/3p4o8KMh9TnZPtXwR2Gght3i+ssKvNd3xzT53utn86yHENxrCFXaj0v6uqR8nwvXQt5FwnVoZraI8Ev9BgBJI4BDgLMJXzxHEkoCV8ZdkvcP5xc49LwC21pM0lXATxKragnVfLVxeSjQA+iX5xCLCxx+VOJ1c+6T9m1GmiYsdEHJJVWq7tGS4zbDh3nW1xfZnkyTL2+F/t6pbd0IQXQh4e+Uagk7tMC+KTlb/VLg72lmb0s6HriGUKU7EUJrWeBB4EYz+08zzu0K8JKg61TMbKGZ/S/h1/PCuPo7LTiUiicp8YDS5wgBsJ5w33BLwr2kDcxspJmNJLQULHT++jzrIfPf8yAzU5HH6PW7oi4j198i+V5/shnvdUv+npjZHwkNmk4iNML5mHCP9YfAzNgYyK0HD4KuU4pVhn+Li8l+Xslf3oWqlkblWV8Xn3sX2HdQnvVHxuf/NbPzzOydHFVwIwoct5iFidfbrcdxyi31niEp3/uW7z2rlOZ8FuoJXS0gBKNUAGvV9zr+sLvSzA4llPB3I1SzCrhA0o6tef7OzoOg68xWx+eaxLrZpIdS2yvXTpL6kTkmaVJq303ybIdwPzKX1D45q7AkbU7+hhtFmdkc0oHw8EJpKyzZmCXf+5bvPauUvZux7RUzqwEws1pCn0+o4HttwQuEH1QfEL7D96zU+TsjD4Kuw5E0pkC/q1SavoT+fhA6MwOxjT78JS6eJKlXjt1PJP/9slTjjI0l7ZLjvBOBz+TZd3l83iHP9otY/2rYKfH5R/lGK4HQSjb2KWx1sbHK3LjYpP+lpA0I3Q3a0mhJR2evlDQUOC4u3pm1eUp8PkLSvoUOnt3HsDlyjb6TYmb1pO8j5/oMu2byIOg6onHALEl/lfQVSY1Vl5L6SToEmEa4lwLpRjEpFxMacWwL3CNpTNy3j6STgAtIB6wMZvYuoV8YwBRJO8R9e0g6ktBNYGmufYFH4vMPJH0n0dJwM0k3AUcX2Le5fk0o7fYDnpD0LUn9UxslbSrp+4TWr4et57lKcUd8nizpi7F1JZJ2J7SCzPuFXyHLgd/HFpipvO0IPESoglxE6POX9AfgOcL36H0KQ+41NpKRNFzS0QpD3f20BXm6SNJdkg7NOu6I2MBqDKE19CN5j+CKa+uOiv7wR6kP4EAyh5IyQr++ZVnr6oAz8hyj0LBpfyHPsGlx30+THjbMCDNZpIayeoh0h/UpWfv1JD00Vyp/SxPLZxGGRTPg2Kx9j6VIJ/1E2i2B1xLHrSfcw0rm2YBvlfCej07tVyDNPuTv8D4EeCdx7nWkh3J7lzAvZLHO8vvkOW/R9ybfMcg9bNo6mj9s2nDCqC2ptA2E1r4rs97rc/Kct8nnK5HmiqxjLCdzSDYjz+fbH81/eEnQdThm9hBhzsBTCCWvt+Om/oRA+G/CF8gnzeyiPMe4jVBteX/cpychcJxEemzSfOefTrgPc2/ctzthyLNfEOYwrMuzXw3wWdKltYaY9hHgEDO7oDnXX4yZvU0Y8utHwGOEL+WB8VwvAVcT7nNNLcf5mpmnpcAewI2ErilVhMB8NaEl7weVykse1cC+wPmEoNyT0IjqNmBnM3sy104WuujsDXyNMFzdIsLnUIQRif5A+Ezk/BwWcTmhav5vhM+XCFWf7xOGrtsr3+fbNZ/iLw7nXILCDBDfAs4zs3PbNjfOudbiJUHnnHNdlgdB55xzXZYHQeecc12WB0HnnHNdljeMaec23HBDGz16dFtnwznnOoyZM2d+ZGbNmmzbZ5Fo50aPHs2MGTOKJ3TOOQeApHebm9arQ51zznVZHgSdc851WR4EnXPOdVkeBJ1zznVZHgSdc851WR4EnXPOdVkeBJ1zznVZHgSdc851WR4EnXPOdVkeBJ1zznVZHgSdc851WR4EnXPOdVkeBJ1zznVZHgSdc851WS0KgpL6SzpR0r2SXpQ0K2v7QEnHSDq6hcffS9LfJc2TZJKOzdouSedKmi9praTHJY3LSjNE0lRJy+NjqqTBWWl2kPREPMY8SWdLUlaaIyS9Jqk6Ph/WGnlxzrnOYvp/53DyJXdw7rX38ubchW2dnYJKnk9Q0m7AX4FRQCpgZMzMa2YrJP0C2FHSe2b2dImn6Q+8AtwcH9lOBU4GjgVmAWcDj0jaxsxWxjS3ApsBn4v5+19gKnBIvI6BwCPAk8CuwDbAFGA1cGlMMwG4HTgnXvPhwJ2SPmNm08uVF+ec6wwaGhr41OEX8ua7ixrX/faPD3Pa9w7irOM/34Y5y6+kmeUlbQS8BAwFHgb+DFwGDDazbllpjwOuB64ws5+3OIPSKuAEM5sSlwXMB64xs1/FdX2ARcApZnaDpG2B14A9UwFY0p7ANGCsmc2SdDxwCTDCzNbGNJOB44FNzMwk3Q4MNbNJifw8Ciw2s6PLlZdC1z9+/HjzSXWdcx3BJw6azPyFy5qsr6oSz9z6Sz65zSYVyYekmWY2vjlpS60OPZUQAG8xs4PM7CagJk/aB+LzPiWeo5gxwEhCEAYgBrEngT3iqgnAKuCZxH5PE0p5yTTTUgEwegjYCBidSPMwmR5KHKNceXHOuQ7tB+fdkjMAAjQ0GP/z58crm6FmKjUIpqrzziqW0MzeB9YCW7QgX4WMjM/ZFc0LE9tGEkprjcXc+HpRVppcx6AZaUZmpVvfvGSQdJykGZJmLF68OFcS55xrN6bNfIub73muYJr5i5dXKDelKTUIbgqsNrO5zUy/BuhT4jmaK7seV1nrctXzFkuT6x5nsfOUKy/pxGY3mtl4Mxs/bNiwXEmcc65dWLu2mgOOuxYy2xQ2ceh+O1UoR6UpNQjWAL2yW1DmIqkfMAQod/hfEJ+zS1HDSZfIFgDDk/mMr4dlpcl1DJqRJrm9HHlxzrkOadT+ZxdNI4ljD5tQgdyUrtQg+BahRen2zUh7WDz+y6Vmqog5hMCSbKzSG5hI+r7bs4QWpsl3fQLQLyvNxLhvyiRCQ5e5iTSTyDQpcYxy5cU55zqcid+5mura2sSa3OWjx/70M6qq2me39FJz9TfCVU4ulEjSVsDvCNV9d5WaqdgPcSdJO8U8bhaXN4v3064ATpN0uKTtCV0bVhG6ImBmrwMPAjdI2j12dbgBuC/RGvNWQnXtFEnbSzocOA24LHH/7kpgP0mnSxor6XRg33h+ypgX55zrUK6+/SlmvPJuWJASjypCmAiP446cyKc/We6mIeVTaheJ/oTm/hsTgtsVwN2Eqr2+wDhCX7qfAAOAN4CdzCxfC9J859kHeCzHppvM7NhYnXgO8ANClet04Mdm9kriGEOBq4AvxlV/J3S1WJZIswNwLbAbsJTQpeP8ZCMWSV8GLiQ08HkHONPM/prYXpa85ONdJJxz7c2ceR+x3RG/hYZ6MANrCBvMSDZ1GDlsEHMePL/i+Suli0RJQTAefByh+8Mm5GnYQfgJMBeYZGbvlHQCl8GDoHOuPWloaKDfnpNjAGyIQTARCBNWP39pm1SDtmY/QczsVWBH4DeEhh3KenxMGHFlFw+AzjnXuWz8+YsTS/EeYKoaNPF4+/6z2+19wKSSh00DiNV4pxHuhY0mDKFWBSw0s7fLljvnnHPtxpfP+DPLVsTxRRobvFeRXSl49WlHsPGIIRXNW0u1KAgmxT6Dc9c7J84559qt2//5MvdPez2xRonGoOnXe+w0hu8d3j67Q+Sy3kHQOedc57ZoySqOPf9uQrBL3fmC9JgfoSTYu1cP/nn9D9smky1UUhCU1KKxLs3M+8M551wH1NDQwOZfviJzpaqA2CgmERQXPVK843x7U2pJ8CnytwjNx1pwHuecc+3A5kdenf7WTwU8s9gAhsZA+MwffkiPHj3aMKctU2pwmk/hIDiQ0D8QQkf0pS3JlHPOubZ3zPn38NGy1WFBgKU6wyf6A0qc+o29+NQ2G7dRLtdPSUHQzIpOBiVpG+B04CvAaWZ2Swvz5pxzro3c8djr3D0tDmqVKgFWEQJhoiy07ZhhnHfcZ9sii2VR9mrKOBTYsXEy3D9Jmm1mz5b7PM4551rHhx+t5FsX3xeXYtBLlQBljTGwe/du/PumH7VRLsujNXsyng90A85oxXM455wro4aGBrb4+u/TKxrHA028ruoGVd1YeN+pbZPJMmq1BitmtkjScmD31jqHc8658hr1lesTS8m+gJllpn9d9XX69u54DWGytVoQlDQQGASsa61zOOecK5+Dz7ibFaurw0JqRBijyQxJPzvy00wYt2lF89ZaWrPrwjmEt+7NVjyHc865Mrjmby/y2H/fJ90BPveIMNtsNpSLfrBvm+SxNZTaWf6YIkl6E2aX+BKwE+GdvLFlWXPOOVcJr879mF/8/un0CuUeEaZH9268+L/frXT2WlWpJcH/o3md5VPv4FVm9j8lnsM551yFVFfXMf7EO+JSHBatSRVoWFj81xMqnLvWV2oQfIbCQbAOWAa8DNxpZi+3NGPOOeda37BjpoQXjcEvcS+Q9PKzVx9Nr14dvyFMtlI7y+/ZWhlxzjlXWeOOv53a+gYy+gJaQ5OGMOd+awI7bTmiLbLY6nxMT+ec64KOu+oJZi9YGRYyZoZIdYoPS7tvN4pfHrVbG+SwMjwIOudcF3PnU+/wf0+8E5fytAYF+vfpwWO/OaLyGawgD4LOOdeFvLtoJcde8WRYyGgFmnpOD4y98LbO1RI0l7xBUFJNmc5hZtarTMdyzjnXQrW19Yw74S9NNyRnhoiBcc4fvkZVVWuOrNk+FCoJeinROec6kVHfvjW8ECiW/jKb+4d1fz71s4zcoF9F89ZWCgW6rSqWC+ecc61qp5P+QnVtQ8Y6Kd0MNBUMvztpaw6dMLpyGWtjeYOgmb2Tb5tzzrmO4ztXP8mchWsalyVhWKz9VOO6rTcawDXHT2yrbLYJr/J0zrlObMo/3+Svz70HpAOemaUDYdSrh/jPVV9ukzy2JQ+CzjnXSb327lJ+9qcXmqyX1BgIUxbd/I1KZq3daHEQlLQxMAHYCOhHkzEG0szsopaexznnXOlWr6th4lkPplckGsNke+XqI+jevVuFcta+lBwEJY0E/gc4hAKBL5WccL/Vg6BzzlWImbH5D3J1hUgHwlQp8KafTWTz4f0rmb12pdSplAYCTwBbAkuBZ4HPA2uBvwEjgN0IJcOPgIfKmVnnnHPFbXnCXxPjX2eWVZL3Ab/32a05dLfRlctYO1RqT8iTCF0nZgJbm9khcf1yMzvGzPYHRgG/AzYEVplZ2SuaJXWTdIGkOZLWxecLJXVPpJGkcyXNl7RW0uOSxmUdZ4ikqZKWx8dUSYOz0uwg6Yl4jHmSzlbWp0rSEZJek1Qdnw/L2l40L845Vw77n/cQK9bUZayT1PioqqqiqqqKT44ewqXf+XQb5bL9KDUIfolQvfkLM1uSK4GZrTKzU4HLgeMkHb2eeczll8CPgROBscBP4/LpiTSnAicDPwF2BRYBj0gakEhzK7Az8DngoPh6ampjLPk+AiyMxzgR+AXw80SaCcDtwC2EiYRvAe6UlPx0NScvzjm3Xk656Xlefnc5kNn1IfsxoE93nrzoC22Z1XZDZs2ZIzcmlpYDfYHeZlYf1zUAS8xsw6y0w4AFwJNmtm/5sgyS7gM+NrNvJdbdBGxgZl+IJbX5wDVm9qu4vQ8h+JxiZjdI2hZ4DdjTzJ6OafYEpgFjzWyWpOOBS4ARZrY2ppkMHA9sYmYm6XZgqJlNSuTlUWCxmR3dnLwUutbx48fbjBkz1vctc851crdOm83PbpqJNRhm6QfQZBbYxVOO6tRDokmaaWbjm5O21HehO7AiFQCj1cCA7CpCM1tMmGB3hxLP0RxPAftKGgsgaTtgP+AfcfsYYCTwcCI/a4EngT3iqgnAKsJEwSlPE64nmWZaKgBGDxFaxI5OpHmYTA8ljtGcvDjnXIu98t4Sfn7zv8OCmpb+SM2UJJj9P4d36gBYqlLfifnAYEk9E+vmEYLj1smEknoDgwmNZMrtEkK15WuSaoFXgZvM7Lq4fWR8Xpi138LEtpGE0lrjb6T4elFWmlzHoBlpRmalK5Qmg6TjJM2QNGPx4sW5kjjnHABLV63jgF893mR9rvuAj54ziUH9fD6DpFKD4FvxeXRi3bPx+bistCcSfnvMLj1bRR0FfBM4hnAf75vAjyRlz/uRXderrHW56oKLpVGO9cXO09w0IaHZjWY23szGDxs2LFcS55yjvr6ecaf8I2NdsuSXDISXfH1nPrXFhrkP1IWVGgTvJ7y9hyfWXR+fT5L0N0nnSforcDHhS/7m9c9mE78Ffmdmt5nZy2Y2FbiMdMOYBfE5u6Q1nHSJbAEwPFmNG18Py0qT6xg0I01ye7G8OOdcybY66d7G141Vn8nXMRgevvumfGd/nxMhl1KD4N2E/oCDUivMbDpwZlw8BJgMHEp4++8ldJcot75Afda6etLXM4cQfJKNVXoDE0nfA3wW6E+4p5cygVB9m0wzMe6bMolQLTw3kWYSmSYljtGcvDjnXEnGn/kg1XVZEyEl7wPG5W02GsT1x03IdQhHiZ3lzWw+cFiO9b+W9A/gCGATYDnwiJk9UJZcNnUvcJqkOYT7gZ8idFu4OebHJF0BnCnpDeBNQnBeRegWgZm9LulB4AZJ3ycE7RuA+8xsVjzPrcA5wBRJFxLue54GnJe4l3gl8KSk0wk/Eg4D9gX2bG5enHOuFF++4ikWLqtOD4iNITLHA5VEv15VTLvgwLbMartXtgG0zewl4KVyHa+InwAXANcRqhU/BH4PnJ9I8xugD3AtMASYDhxgZisTab4GXEW65ebfgRNSG81suaRJ8RgzCKPkXEqoek2leUbSV4ELgfOAd4CjYgm5lLw451xRk+/8L8+/k9lNW3FGiOTYoALevPJLFc5dx1Own6Cki4ApZvZm5bLkkryfoHMu5Zan53LG7S+n+wE2hO/vXN/jb13+Bfr27lHpLLYL5ewneBrwuqTnJP1Q0pD1z55zzrlSvTD7Iybf+WrGunyjwkw797NdNgCWqlgQXEgoVe9GqMqbL+kOSV+Q1DXn3XDOuQqbv2Q1X7k6fYcl2fozOwD+8Ye7scUIH5GxuYoFwY2BgwljY64DehEav/wNmCfpUkk7tW4WnXOu61qzrpY9L3yicTk5OJckVJXuCnHK57fmgB03aoNcdlwFg6CZNZjZg2Z2NKGf2/cIY2tCaJByEjBT0n8l/UzSiNbNrnPOdR0NDQ3sOPnRnNuyR4Q5eKeN+OnB21Y4hx1fs/sJmtlKM/ujme0DbEHoOvA24TfIDoT+gO9LulfSl7OGVnPOOVeiHc9MD0ucr/pTEluPGsAN39u1DXPacbVoFFUze9fMLjCzbQiDQN9A6D7QnTDJ7u3AAknXxamGnHPOlWDC+Y9SHacFTDaAyQ6Eg/p255HT92m7jHZw6z2UuJk9Z2bHEybTPZLQkb2OMHj2D0lXnzrnnGuGQy6bxpLVmYNiZbQErQqP7t3Efy8+qC2y2GmUbT4NM6s1s78Q5tq7AmiIm5R/L+ecc0nH/WkGby9eA4AaS33E5cxq0Ncv8dFg1ldZRoyJk8QeDnwD2J8QXFPB77/lOIdzznV2593zCk+/vaTJ+lQgTHaKn3HefnTv7j3V1td6BUFJ+xEC3+GEwahTgW8hYVzMm+Jwas455wr447Q53DnjQyAV9IzkjGtm6SrRB3/xGQb7vIBlUXIQlLQtIfB9jTBYNoS/VDXhfuBNwINZs88755zL48GX53P5w29nrEtM8pax/IfvfIpPDPfO8OXSrCAoaUPgaMLktTunVsfn54EpwG1mtqzcGXTOuc7sxXeX8Mu7Xm+yPlcV6FlfHMue2wxvkta1XMEgKOnLhMB3YEybCnwfAP9HqO6clWd355xzBcz9aBXH/uk/QKqqM38V6Df22IRjJmzeNhntxIqVBO8g/VdZQ5gv7ybgn1Zo+gnnnHMFLVlVzeHXPd9kfYh5mVWge2+9Aad/YbvKZa4LaU516DRC4LvTzFa1cn6cc67TW11Tx6TLn2lcTga+MDFuOu3Ykf259ps741pHsSD4CTObU5GcOOdcF1BXX88+v32qcVlS432/5ODYACMG9OTOH/ugW62pYBD0AOicc+XT0NDAnpfkHkQr2SEeoG/PKh75xV6VylqXVZbO8s4554qb+JtpjUNpQXZjmLTuVfDMGftWMmtdlgdB55yrgP0unUZdojlh6P6QDIRpz52xd2Uz14V5EHTOuVZ20JVPs6Y2XQZMN4RJBb90SfC5M/aiWzcfDq1SPAg651wr+tJ1z7Kiuj6j6jPdAjSzK8S/fr4HPTwAVpQHQeecayVf+f10Plpd12R9qkVosjHo/SfszoA+Phd5peUNgpK+Caw1szsrmB/nnOsUjr15Jh+uqG2yPntMUIDbvjeeYQN7VyZjLkOh+QSnEOYFbCTpX5I8KDrnXAHH3/oisz9aB2TOCZiaBzC9Hv73GzsyZli/tsxul1aoOtRoGiT3ARa0Wm6cc66D++mdL/PawtVN1idbgaYC4W8P344dNhlSyey5LIVKgiuADST5pFXOOdcMv7znVV6avzJjXb6Z4c85eCs+s+WGbZBLl1SoJPhvQsnvT5L+D0iNG9pT0kSye3cWYGZPtjiHzjnXAZx172u88N6KxuVU68/QACZzWqST9h3DgduPapuMugyFguAlwN7AUfGRMgR4vIRzWJHzOOdch3b+A2/w3LvJANi0G0Rq/ff22IQv77JJ04O4NpE3OJnZw5L2BX4CjAP6AKOBBsJ8gs451+Vd/PCbPDU7PZ947v6AwVd3GcU3d/c5AduTQvcEMbNpZvYVMxtnZlvE1YvNbEwpj9bIuKRRkm6StFjSOkmvSdo7sV2SzpU0X9JaSY9LGpd1jCGSpkpaHh9TJQ3OSrODpCfiMeZJOltZQ71LOiKevzo+H5a1vWhenHMdz28eeYvH317auJz8Zki2BpXEYTuO4Pi9tshxFNeWCgbB9ioGqqcJ9QyfB7YllFgXJZKdCpwc1+8atz0iaUAiza0o24ehAAAgAElEQVTAzsDngIPi66mJ8wwEHgEWxmOcCPwC+HkizQTgduAWYKf4fKekT5eYF+dcB/K7f77F4+8szVgnMoNfVVV4HLTdME7af8u2yagrSB1xgnhJFwF7m9ln8mwXMB+4xsx+Fdf1IQSfU8zsBknbAq8Be5rZ0zHNnoRJhMea2SxJxxPujY4ws7UxzWTgeGATMzNJtwNDzWxS4vyPEkrMRzcnL4Wudfz48TZjxowWvU/OudZx6T/f4V9vf4wZNDQYDWYkv0rNrHFU0H23Gsrkg7Zpk3x2VZJmmtn45qRd75KgpD6SNo2PPut7vGY6FJgu6XZJiyS9KOmERDXlGGAk8HBqhxjEngT2iKsmEFq8PpM47tPA6qw001IBMHoI2IhwfzSV5mEyPZQ4RnPykkHScZJmSJqxePHivG+Cc67yLv3XOzz29pLG5czO8Kl1okpi4hZDPAC2cy0KgpKGxntcrwErgbnxsTLeEztHUmv2AN0C+BEwGzgQuBL4NfDjuH1kfF6Ytd/CxLaRhNJa4++3+HpRVppcx6AZaUZmpSuUJoOZ3Whm481s/LBhw3Ilcc61gd88+iZPJAJgSqgGzawC3X30QM79/NjKZ9KVpOSuC5J2A+4BRtC0r6CAscDZwHGSDjOz59c7l01VATPM7PS4/B9JWxGC4DWJdNl1vdkTd+WqCy6WRjnWFztPc9M459qpSx59i2fnhm4QGZMgxdagyS/DnTcZwAVf2K7COXQtUVJJUNII4AFCCWYZcDEwidAwZdv4+tdx2yjg/rhPuX1IuJ+X9DqwWXydGtotu6Q1nHSJbAEwPNnSM74elpUm1zFoRprk9mJ5cc61Yxc9/BbTYz/AxqpP0lWgyVagO28yiF8d4gGwoyi1OvRUQmf5l4BtzexMM/unmc2Kj3+a2RnAdsDLwFBCa8pyexrIrmjfGng3vp5DCD7Jxiq9gYmk7wE+C/Qn3NNLmQD0y0ozMe6bMonQ0GVuIs0kMk1KHKM5eXHOtVPnPfAGMz9Y0WS9iIEwEQx32WQAvzrEq0A7klKD4OcJtQDfMbNF+RKZ2ULgO4TPyRdanr28Lgd2l3SmpC0lHUnovnBtPL8RZsA4TdLhkrYnzIqxitAtAjN7HXgQuEHS7rGrww3AfWY2K57nVmANMEXS9pIOB04DLkvcS7wS2E/S6ZLGSjod2Deev1l5cc61T5Pve51XFq5psj5VGqyKj24SO288gAu+sG0b5NKtj1LvCW4GrDSzfxdLaGYzJa0kXUVZNmb2gqRDgYuAs4D34vN1iWS/IYxycy2h9DodOMDMkqPbfg24inTLzb8DJyTOs1zSpHiMGcBS4FLgskSaZyR9FbgQOA94BzjKzKaXmBfnXDvyy7+9xtxl1RnrUqOgmaVnggDYaeP+nHewlwA7opL6CUpaBvQE+lmRHSVVEUo7NWY2uFBal5/3E3Su8k6++1XmrajBoLEPoCX6Aib7AY7fdCCTD9y6rbLqcmjNfoJvAL2Aw4oljGl6A7OKJXTOufbihDtfZv7KpjPCQ3oi3Koq0a1KTBg9yANgB1dqELyDUCNwY6wmzEnSF4EbCfcP/9zy7DnnXOX84I7/sqy6IWNd9lBoqcdnRg/ml5/dqm0y6sqm1HuC1wBfJ4yR+aCkGcBjwDxCCXFzwvRL4wifnf+QeZ/OOefape/f9hLr6sPrcO+v8eZf7BeYrgLd5xND+PHEVpkbwFVYSUHQzGokHUAYZPpAwmDQ2fWuqbvFDwLfNLOa9c6lc861EjPje7e9TG2ilUMq/kH6Cy3VEGbSVkP47h6jK5pH13pKHjHGzD4CPhcHm/4yYeaF1Nheiwkz0t9lZk+VLZfOOdcK6urqOO6u12nIsa1K0JA1KNYh44ZxzC4bVyZzriJaPON7DHIe6JxzHVJ1XR0//ssb6eHPiFPhJmaDr0qMbHjUTiP44g6jKpxL19paHASdc66jWr62llPuzWy4nhoKLTUbfLIv4Ld33Yj9t/HB7DsjD4LOuS5l/vK1nPvw7MblVCMYM6NKYSjsUP4L/z/hM5vy6dFD2yCnrhI8CDrnuoxZi1Zx+ZPvZqxLV4OmS4GpwPiLfUYzbtTANsipqxQPgs65LuHZuUu5eeaHTdZLQnEEmORQaGdP2oIxG/SrYA5dW/Ag6Jzr9O57dSEPvJk5G3zsAogZVCmzFejFB2/JsAG9sw/jOiEPgs65Tm3K8+8zc96qxuV0tWe6+jPpii+NpV8v/2rsKvwv7ZzrtC59fDbvLkuP19FYAgRQKiCm019z2Db07O5fi12J/7Wdc53SuQ++mTEOaHY/QEFGQ5hrDhtLt27d2iSvru14EHTOdSpmxmn3v0ltQ+Zsb2Eg7MwqUEn0rIIrDt2u8hl17UKLgqCkgcD3gEnApkAfM/tE1vZDCROrTy1HRp1zrpiaujomP/ROxigwGf0AAZMatw/sIS7+gk+G25WVHAQlTQD+AowgPbZsxk8uM1sh6afATpLm+DiizrnWtnR1NZc8kdUHMNXnL10PCmYI2HhgT07b/xO4rq2k+QQlbQLcB4wEHgC+ASzNk/x6wufviPXJoHPOFfPW4lX8tkkADEEvNR9gVQyIVRI7jOznAdABpZcEfwEMAW42s2MBJP0uT9oH4vM+LcqZc841w7TZH/PgrI+brE/PAmHpuSAEe48ZxJd8IGwXlRoEP0eoWDi7WEIz+0DSWsBnnnTOtYrb/jOPVxeuyViX6v4QOsFnhEC+suMwdtvcxwF1aaUGwU2B1Wb2XjPTrwUGlHgO55wr6uppc/h4bV3GuswZ4TPTn7DHJmw+1IdBc5lKDYLVQB9JVWaWax7KRpL6AYOBpvUUzjnXQg0NDVzy2Gxq4zeQBDLSHQHjymQV6Bn7jWFg7x4Vz6tr/0pqGAO8SQicOzQj7RHx+C+XminnnMtlXU0dFz82m7rMLoDpRjCpxi+Jx/kHbOEB0OVVahC8h/AZO6tQIknbAL8l/C67s2VZc865tPnL1nDZtHebrE+3/lTjawl6d4OLDt7ah0FzBZUaBK8E3gMOk/QXSRNTx5DUT9Jukn4NvAAMA14H/ljODDvnup7n3l3Czf/OMQ0S6dKfBFVVoluVGN6/G2cfuHXF8+k6npJ+IpnZakmfA/4BHEYYFSZlReK1gNnAF82sdr1z6Zzrsu548QPmLq3OWKfE/8KtQGu8Hbjthn05aueNK5pH13GVWhLEzF4HPglcBMwjPTJR6rEIuATYxcxmly+rzrmu5rqnZ/NechaI1HOi9BeWRZXEpK2GegB0JWlRZbmZrQAmA5PjKDKjCAF1oZnNLV/2nHNdUU1dHdc9+z71iTbojdMfmTDSsz+kSoDf3HkjNhvat/KZdR1aqcOmfTE+NkytM7MPzOwFM5veVgFQ0hmSTNI1iXWSdK6k+ZLWSnpc0ris/YZImippeXxMlTQ4K80Okp6Ix5gn6WwpcxpOSUdIek1SdXw+LGt70bw454IFy9dw/XPvY4mJ/iQ1lvrC8Gfp/6okfj5xcw+ArkVa0jr0LmBdK+SlRSTtDnwfeClr06nAycBPgF0J1bSPSEp23r8V2JkwEs5B8XXjrBdxNoxHgIXxGCcSho77eSLNBOB24BZgp/h8p6RPl5gX57q86XM+4s5XFmasS/7kTI//GR49BKftO4a+vbwLhGsZJX9tFU0sfQRgZhsWS1sJkgYB/yYEwbOBV8zshFhSmw9cY2a/imn7EILPKWZ2g6RtgdeAPc3s6ZhmT2AaMNbMZkk6nnB/c4SZrY1pJgPHA5uYmUm6HRhqZpMS+XoUWGxmRzcnL4Wucfz48TZjxoxyvF3OtWt3vvg+i1bX04BhBg0GDRZem6WrPVPfWUN6V/H9CT4qo2tK0kwzG9+ctKWWBF8FBsUSUntwI3CXmf0ra/0YwkwXD6dWxCD2JLBHXDUBWAU8k9jvaWB1VpppqQAYPQRsBIxOpHmYTA8ljtGcvDjXZdXX13Pjs3NZvKa+ybZkv79U6a9bldh+RD8PgK4sSg2CNwLdCNV6bUrS94Etyd1xf2R8Xpi1fmFi20hCaa2xKBxfL8pKk+sYNCPNyKx0hdJkkHScpBmSZixevDhXEuc6haVrqvnDCx+QawzG1EzwyUAowcFjN+Tg7XL+03GuZKX2E7xF0m7AeZJ6A5eb2ZLWyVp+cUSai4CJZlZTIGl2Xa+y1uWqCy6WJtdEwsXO09w0IaHZjYQfHIwfP7759dXOdSAvzV/K9PdXNFmf7gOY+keSvin4nV03ZkDvnhXJn+saSgqCklLVjmuAM4BfSnobWAw0rcsIzMz2b3kWc5oAbAi8kmio2Q3YS9IPgVTLy5HA+4n9hpMukS0AhktSqjQY798Ny0qT/ZNzeHwulia5vVhenOtS/v7yfBbnmAEijIMdXzX2AQxVVsdP2JyqqpK7NjtXUKn9BPfJsf/Y+MinNUoy9wDZrUX+BLxFKCG+SQg+kwhDuBFLrhMJrTsBngX6EwJq6r7gBKBfYvlZ4BJJvc0s1SJ2EqGhy9xEmkmEsVJJpEkdY04z8uJcl1BXV8ct/5nf5BdzYx/A1ApLzwIxpHc3jtll00pl0XUxpQbBb7dKLkpkZsuAZcl1klYDS8zslbh8BXCmpDcIQXEyoSHMrfEYr0t6ELgh3l8UcANwn5nNioe9FTgHmCLpQmBr4DTgvMS9xCuBJyWdDtxNGE5uX2DPeB4rlhfnuoJFK9fywKyPct+DiHMAVqWmAlT49fzJkf34zBbDKp1V14WUek/wptbKSCv4DdAHuBYYAkwHDjCzlYk0XwOuIt1y8+/ACamNZrZc0qR4jBnAUuBS4LJEmmckfRW4EDgPeAc4ysyml5gX5zqtZ2cv5q0lTbsXJ2eBTzWCSRUBv7DtMDYa5B3gXesqqZ+gqzzvJ+g6urte/IB19bHPH6Gfn0F8nV5O+tYuG/sUSK7FSukn6J8y51yrWF1dy99eXUj27+xU1WdYCP9L3f/r10N89VN+/89VTouDYGzcsROh43g/Eve0s5nZzS09j3Ou43n1w+W8tGBVxrrsPkGpaWcsfnNss0Ff9tiiXQxG5bqQkoOgpH7Ar4FjgeZW2HsQdK6LuO/l+ayua3qbRRKKVZ/JMegFfG7sMIb37125TDoXldpPsDfwL2A8oV/gS4S5BWuA54ERhFFcBCwBXi5nZp1z7deadTXc/0bT1p+KRUADqiQakrNDAMd8aiO6detWwZw6l1Zqz9MfEWZBeBPY2sw+FdcvMbO9zGwbwliZfwYGA4+a2b5ly61zrl16ff5y/jHr44x12fdHUstVcQLcDfp05xvjN/UA6NpUqdWhRxJ+0J2Sb+5AM3sP+JqkOuB8Sf82swfWL5vOufbqH68sYF19jupPQrWnmaVngCe0iRm/8UC2GdlexuF3XVmpJcGxhCCYPWtCrsm8JhM+8ye2IF/OuXZuxdoa7nlpAdU5Rr9O3fOrIjUhbvpxxPYjPAC6dqPUkmBvYLmZ1SbWrQWaTA5rZu9LWkaYqNY514nMfHcJH6zIHLs+PfYnjY1fzKzxl3bv7vClHTaubEadK6LUIPghsJmk7mZWl1g3RtIYM5uTSiipByE45htY2znXwdTV1fHgGx836fsHWdWfkNEKdLsR/dh+1KBKZtW5Zim1OnQ24bOe7M36Qnz+WlbarxNmdngf51yH98HHq3nojcIzpyWrP1MNYL4wdpgHQNdulVoSfADYD/g8cE1c9wfgKOBsSaOAF4EdgB8QfgzeUZ6sOufayuOzFrO6NvcQi2HQl1Diy67+PHjcqIrkz7mWKjUI/hX4KiHIAWBmj0q6hjDw9A8TaUWYZujC9c2kc65tLFtTzXNzmk58C1mDX5NZ/TlueB+2HumlP9f+lTqLxBxCP8Hs9SdK+gehC8UmwHLgEWBKViMa51wHMWPuUj5eU5dzmxrHO7OMQAhw0NgN6N0zV4Nx59qfsg2gbWYPAg+W63jOubaxrqaWp95ZTkPW2C/Jca9Ty42T3woG9hJ7bz28kll1br35LBLOuUavzlvGgpW5S38pqTkfjHQn+F027c+oQf1aO3vOlZ0HQeccNbW1PD17RY5pj8KzGVQhGmSNy0JUAQdutyFVVaU2NHeufSh1AO0/tuAcZmbfbcF+zrkKeOPDlSxYUfjWfaoqtIr0+GebDunBuI0GVyCHzrWeUkuCx5IeFCKf7CnDDPAg6Fw7U1Nby/Q5q2g6r3sIejI1VnmapUuFAHtvOdgbv7hOodQgeF6R7YMIrUc/Q5hK6X+AwjcYnHMVN2v+ShatqssdAAnBr0rQkJrxNlaDDu5dxW5jNqhkVp1rVaV2kSgWBAGQNBG4G9iF0LHeOdcOrK2u4d/vrc4R+nKraiz9iV03H8jAPj1bKWfOtY1WuZttZtOA44EDgZNa4xzOudK8/P4yXnx/TcY6Zd3ZkOIj8V/fHmL/sRt6AHSdUmu2Dr0bqCXcR7y8Fc/jnCtg2Zpq3vhwLYWKf8mqz2TXhx036scGA3pXIJfOtY1WC4JmViepBtiytc7hnMvPzPj3nBXU5Ql+jQ1eEvcAw36iV3fY/RNDK5dZ59pIqwVBSdsD/YGlrXUO51xu8z5azbwVdZjRpPFLqgI0jPWZDoQp223Uhw299Oe6iFYJgpI+BUwh/Dub1hrncM41VVNby38/WFOw6rPpnH9hfa8q2PUTQyqRTefajVI7y/+rSJLehAG0Nyb84FwDnNuinDnnSvLaBytyTneUqu4Mr0Pgq4qBMGXcRn0Z3K9XhXLqXPtRaklwnxLSPg+caGYvlngO51wJFi5fywdLa3PP9p4c9Do96UPcJvp0h0+O9lFfXNdVahD8dpHtdcAy4GUze69lWXLONUdNbS2vzC/c6jOlsTSY6BGx48Z96dvbuz24rq3UzvI3tVZGnHPN9+r7K6lpKJwm+54fsQvE0L5VbDVqQGtmz7kOo0MO/S7pdEkvSFohabGke2Nr1GQaSTpX0nxJayU9LmlcVpohkqZKWh4fUyUNzkqzg6Qn4jHmSTpbkrLSHCHpNUnV8fmwUvPiXHPMW7KaF98LATDfkGfxReNT6lEl2GXzfh4AnUvokEGQcG/yOmAPYD9CNeyjkpIdm04FTgZ+QhjPdBHwiKTkN8CtwM7A54CD4uupqY2SBgKPAAvjMU4EfgH8PJFmAnA7cAuwU3y+U9KnS8yLc3mtXFPNf99fyUer8hf/1Bj4mkbAzYb2ZNctBtG9u8+e5lySLNfd9HyJpbPLdWIzO79cx5LUH1gOHGpm98aS2nzgGjP7VUzThxB8TjGzGyRtC7wG7GlmT8c0exK6dIw1s1mSjgcuAUaY2dqYZjJhSLhNzMwk3Q4MNbNJifw8Ciw2s6Obk5dC1zZ+/HibMWNGed4o1+HU1tby+oLqUOqL/1SNdGOX7PUktgH06gY7bDawUtl1rl2QNNPMxjcnbak/C8+lWbfhC0rdqihbEAQGEEq1qY75Y4CRwMOpBGa2VtKThNLjDcAEYBXwTOI4TwOrY5pZMc20VACMHgIuAEYDc2Kaq7Py8xBwQgl5ySDpOOA4gM0226wZl+86GzPjjfmr8472kiGr1WfqxbhRvendyxu+OFdIqUHw5vj8JcK0SWuAmcA8wj+9UcB4oC+hlejfWf+g2RxXAi8Cz8blkfF5YVa6hYQ+jKk0iy1RFI4lu0WJ/UcCH+Q4RmrbnPic6zzJYxTLSwYzuxG4EUJJMFca13nNWbiK1bnmuE39fKTpkGfJVp+jBnRjo6H9KpFV5zq8lnSRuIMwHNpk4EozW51MIKkv8FNCSa+fmR1ZjozmI+kyYE9CtWZ91ubsAKKsdbkCTLE0yrG+2Hmam8Z1YQuXruWjNQ1FPxTJVp/JIc96dYPtNvHbzM6VotQg+BPgcOBkM7siVwIzWwNcLGktcKmkE8zsmvXMZ06SLge+CuxrZrMTmxbE55HA+4n1w0mXyBYAwyUpVRqM9++GZaUZSabh8blYmuT2YnlxXdjSlev4cGV9znE+m0hUfSa7P2w3qjc9e/hM786VqtTWod8mtMS8vhlprwfqge+WmqnmkHQlcAywn5m9kbV5DiH4JBur9AYmkr4H+CyhRDshsd8EoF9Wmolx35RJhIYucxNpJpFpUuIYzcmL64JWranm9Q9Xs2BldgVGUxnz/sUWnxJsOrQHO202wAOgcy1UaklwS2CVma0rltDM1klaRStMpSTpWuAbwKHAUkmpktgqM1sV7+1dAZwp6Q3gTUL17SpCtwjM7HVJDwI3SPo+4avlBuA+M5sVj3crcA4wRdKFwNbAacB5iXuJVwJPSjqdMIfiYcC+hCpampMX17WsWVfNe0vrM1p2piTH+Wxcl2OmhwG9YMzw/pXIrnOdWqlBsAYYLGlzM3u3UEJJo4HBtM5USj+Kz//MWn8e6QG7fwP0Aa4FhgDTgQPMbGUi/deAq0i33Pw76VadmNlySZPiMWYQruVS4LJEmmckfRW4MJ7/HeAoM5ueOE9z8uI6uTXV1by/tHipD8jb4rO7YOxG/cgar8E510Kl9hO8FziY0AXgUDOryZOuB/A34EDgfjP7Yhny2iV5P8GOb011NR8sqydV8GtOH7+M0mB8uc2IXvTwak/nimrNfoIXEkZWORB4MbbMfJJwjwxgI2Av4CRgW8I9wQtKPIdzncKa6mrmLWvIWe3ZKKuNcK6qzzEbdqdvb5/myLnWUOoA2tMlfQP4IzCWHB29IwHrgG+b2Qvrl0XnOpaVa9axcFX+GpaM6Y1S6+JzssXnyIHdGNrfZ3h3rjWVPJCgmd0m6XngTEIjkOzJyJYBfwEuzuq24FyntmTFWpYmmowVu9PQpKN7fDm0bxUjBvdprWw65xJaNJpuDG7fBb4raQtC3zoII7B44HNdysLl61hdU2Tkgxz9+3K1+Nx4g76tm1nnXIb1HlI+Bj0PfK5LMTPeX1JNvRUv8WXL7ujerwds4sHPuTbh86o4V4Kamhrmr2ygUFuXlLzje8aXvXvAZh78nGtTZZlPUNJPJP1H0mpJSyU9JulL5Ti2c+3ByrXVvPtxdWMALCYV75Jz/KWqPvt0h61H9vUA6Fw7ULAkKGk8oSP5UmA7M6vOkeY2IDVItgidwvcG9pJ0hpldUt4sO1c5C5ZWU1NKlWdypgcyqz17d/NqT+fam2LVofsRWn/ekicAHgN8JS4uJHSQX00YzmwMcIGkv5vZ6+XLsnOtq6amhkWrLQ5o3XwZ1Z6JQNivJ4z01p7OtUvFguBehH/Od+fZ/tP4/B6wi5l9DI2zrz8F7ERoRXrK+mfVudb18Yoa1tYDWOGSX56WnmFTOhAO7iM28H5+zrVrxYLgFoR/59OzN0jaENg1bj8/FQChceb0cwklw73Lllvnyqy6uoaP12YOZ1aK7CpPgA37ioF9Pfg51xEUC4IjgRXZE+dGe8RnA+7NsT01uPUWLcybc62ioaGBxSvrqM8at7M58lV5AowaIHr18uHNnOtIigXBfoT5A3PZNT6/bWaLszea2RpJywGf6tq1C8tX17K2rhkT15Ls3lC4yrMKGDWwmw9s7VwHVSwIfgyMkDTczBZlbdud8P1QaIqDnoTpl5xrE2vW1bIi9QlsQXUnNK3yNIM+3cWIQV7qc66jK9ZP8L/x+evJlfF+4MS4+ESuHeNEt32AeeuTQedKVV1dx6KVtSxcUcvK9fgJlrzPFydzZ2hf2HyDXh4AneskipUEbydMm3S2pDnA/cDGhMlhewLV5G85mgqSr5Qhn84VVF1d11jia051Zy7pKs/00C5SWBrev8qrPJ3rhIoFwanAj4FdgLuythlwjZl9lGffr8Y0T61XDp3LY826OtbUxVrOXJPRNlNySr/kvb8BvcSgvj3LkFPnXHtVMAiaWb2kzwG3AJOyNt8MnJ5rvzizRGo2+VwtR50rmZmxam19xgguLSnzpRq2ZDZ2SRvWD3r29ODnXFdQdADtWNI7UNI2wA5x9Uwzm1NgtwbCqDG1Zvb2+mfTdVU1NfWsqg2vW1rN2SijW0M6EEKYxqh/bw98znU1zZ5FwsxmAbOamXYuMLdlWXJdWUNDA6vWGfUF0hTq1N7YfSFjXaLEmFjoWSU2GOD3+ZzrynwqJdemzIzV6xqoI3dwa8koLin5qjuH9IGePT34Oec8CLoKq69vYG0tidFa1rOKMyVHVSekuzkM6gm9enngc85l8iDoWlVNTQPVWVPwrU/pDpqW8HJVdQoxsCf06uUfcedcfv4N4cqmpsaoTka4MhXycslV1Wnggc85VxL/tnAlq683quuhISvIZVRtlikW5hyzM7ENYEAP6NnTP8rOudL5N4fLycyorc0cPb1QMCvbvb0csgNhN8GA3qKqqtiof845V5gHwS6qthbqifPo5QpgTUp5WcutEPOSwS5bv+7Qq1e38p/UOdeleRDswOrrQyvLhgJpCgWrvKW3Mge4jMYrTbblruLsDvTrXYWSo1g751yZeX1SBUn6kaQ5ktZJmilpYrF9zGBdXe5H7XoEwLYkZc/QILohBvYSg/t0Y3CfbvTv080DoHOu1XkQrBBJRwFXAhcBnwKeAR6QtFmbZqxMhLJXNFlMruoBDOwtBvWpYlCfKgb0qfJ7fM65ivNvncr5OTDFzH5vZq+b2U+AD4Hj2zhfLZKrkJYzEMZVvapgQO8qBsZHH6/qdM61A35PsAIk9SRMR/W7rE0PA3tUPkely3VfL1dDFiF6Cnr29ADnnGv/PAhWxoZAN2Bh1vqFwGezE0s6DjguLlb36aGuNDHxhkC+OSo7K7/mrsGvuXI2b25CD4KV1aQwlWMdZnYjcCOApBlmNr4CeWsXutr1gl9zV+HX3D75PcHK+IjQLW9k1vrhNC0dOuecqxAPghVgZjXATGBS1qZJhFaizjnn2oBXh1bOZcBUSc8DTwM/BDYCri+y342tnbF2pqtdL/g1dxV+ze2QrL32qO6EJAZB4+oAAAmGSURBVP0IOBUYBbwC/MzMnmzbXDnnXNflQdA551yX5fcEnXPOdVkeBJ1zznVZHgTbqZYMtt0eSTpd0guSVkhaLOleSdtnpZGkcyXNl7RW0uOSxmWlGSJpqqTl8TFV0uDKXk3LSDpDkkm6JrGu012zpFGSbop/53WSXpO0d2J7p7pmSd0kXZD4dzpH0oWSuifSdOhrlrSXpL9Lmhc/w8dmbS/L9UnaQdIT8RjzJJ2tSo2raGb+aGcP4CigFvg+sC1wNbAK2Kyt89aCa3kI+DawPbADcDewABiaSPNLYCVwREx3BzAfGJBI8wDwKmGYuQnx9b1tfX3NuP7dgTnAf4FrOus1A4OB2cDNwG7AGGB/YNtOfM1nAEuAQ4DRwBeBpcBZneWagYMJg/5/GVgDHJu1fb2vDxgYvxPuiMc4Ih7z5IpcY1u/yf7I+cGbDvw+a91bwMVtnbcyXFt/wsABh8RlEQYSPzORpk/8R/CDuLwtYWSdzyTS7BnXbdPW11TgWgcB7wD7AY+ngmBnvOb4Rfl0ge2d8ZrvA27KWncTcF9nvGbCD/Fjy/03JUwisALok0gzGZhHbLzZmg+vDm1nEoNtP5y1qcMMtl3EAEI1/NK4PIYwkk7j9ZrZWuBJ0tc7gfAPMDmwwNPAatr3e3IjcJeZ/StrfWe85kOB6ZJul7RI0ouSTkhUaXXGa34K2FfSWABJ2xF+8Pwjbu+M15xUruubAEyL+6Y8ROhHPbo1Mp7kQbD9KTTYdvawax3RlcCLwLNxOXVNha53JLDY4k9EgPh6Ee30PZH0fWBL4KwcmzvjNW8B/IhQJXog4e/8a+DHcXtnvOZLgKnAa5JqCdV8N5nZdXF7Z7zmpHJd38g8x0ieo9X4iDHtV7MG2+5IJF1GqArZ08zqszYXu95c194u3xNJ2xCqBydaGDIvn05zzYQf1DPM7PS4/B9JWxGC4DWJdJ3pmo8CvgkcQwiAOwFXSppjZn9IpOtM15xLOa4v1zHy7VtWXhJsfzrlYNuSLgeOBvYzs9mJTQvic6HrXQAMT7YWi6+H0T7fkwmEEv0rkuok1QF7Az+Krz+O6TrTNX8IvJa17nVgs/i6M/6dfwv8zsxuM7OXzWwqYXjE1A+BznjNSeW6vgV5jgEVeA88CLYz1gkH25Z0JeHX8n5m9kbW5jmEfwSTEul7AxNJX++zhAY1ExL7TQD60T7fk3sILWF3SjxmALfF12/S+a75aWCbrHVbA+/G153x79yX8IM1qZ7092pnvOakcl3fs8DEuG/KJEIr07mtkfEMbd3iyB85W2EdBdQA3yO0rrqScHN587bOWwuu5VpCy6/9CL/2Uo/+iTS/jGkOJzSRvo3czaxfJnQ5mBBft4tm5M18Hx6naReJTnPNwK6Ebj1n/n979xZiVRXHcfz7I69pmmJNFzWKesimIKKgK5J2IS9kZDR2DyIwsHowiKjspQcp6KUCg5zINMtSswc1MLvQHcF6kJQib2iZqKOWlfrvYa3THI9zjs5pZmTO/n1gs8/Ze+01/y2e+c8++7/2It0LnQrsAR5p4HNuBbYAE0gFHFOAHcCLjXLOpARW+kPuD+CZ/Hp0V50fqYp6ez62OffVhodIFHshFRn8AvxFujK87kTHVOd5RJVlVlkbAbNIX6kdAD4Bmiv6GQ7Myx+Otvz61BN9fp34d6hMgg13zjkZrM3nsx6YQVmJe6OdM6nS+SXS1e6fpKKg54EBjXLOwNgqn9/Wrjw/0jcnn+Y+tgHPlv/f6c7FD9A2M7PC8j1BMzMrLCdBMzMrLCdBMzMrLCdBMzMrLCdBMzMrLCdBMzMrLCdBM+uUPHHqUROsmvVGToJmZlZYToJmZlZYToJmZlZYToJmZlZYToJmvZSkUZIO5yKV5hrt+kvak9tNztv6SZog6TVJayX9LumApI2S3pJ0WR3x3J9/xuoabWblNq012kyStFTSdkl/S/pN0jJJN3U2JrNjcRI066UiYjPweX47rUbTCcAQYBewPG+7EfiQNF3XJcBA0uwAo3NfX0m6pxvCrkpSX0nzgA+AyUATaXaG04CJwHJJs3syJmt8ToJmvdv8vL6zRpuWvF4UadJmSPNTzgXGASMiYlBEDATOIU0P1AeYI2n0Ub11n9nAXaQpxKaR5qQbSpqy6GHSNDwzJbVU7cGsk5wEzXq3d0mT2Z4r6crKnZJOIV0JQnvCJCJWR8SDEbEqInaWbd8UEY8DrwMDgAe6Nfr2OC8gzT+4GxgXEQsiYl+OaV9EzAEeys2f6omYrBicBM16sZzAVua3HV0h3Ur6qnMradLS47Usr6+uP7pOuZf0+2hJRPxcpc37pEmmL5J0Zg/FZQ3OSdCs9ytd4d0h6aSKfaV7hW9HxOHyHZKGS3pa0heSdko6mItWAlicm53VjXGXuyqvb88FMUctwBagb243qofisgbX50QHYGb/21JgP6mQ5HrgIwBJI4Dxuc388gMkjQFW5WNK9pIKUQLoBwwDBnVn4GVKV3aD83IsJ3djLFYgvhI06+UiYj+pohKOrBKdSvpD98eIWFNx2FxSAlwD3EwqQhkSEU0RcUY+FkDdF/kRSr+LHo0IHceyuofisgbnJGjWGEpXelMk9c+vWyr2AZArPq8ADgGTI2JFqQilTBOddzCvB9RoM7TK9l/zekwdP9esbk6CZo1hBbCTlGQmSBoJXJP3LahoOzKvd0TE1ir9ja+yvZbdFf135PIq27/M60mS+lZpY9blnATNGkBE/AMsym9b8iLg24jYUNF8T143STq9si9JF1N78H01P+T12R09cUbStVSvNn0DOEwqxHmy1g+RNKyO2Mw65CRo1jhKX3tOpH183/wO2q0jVVoKWCjpfPjviS23kQprKr8ePaaI2Ah8k9+25mRa6ncqsIT01JqOjl1HGqQP8JyklyWdV9ovabCkGyS9SRobadYlnATNGsdnwGbSPbkLSVdWCysb5aESM/L+scAGSW2kxPceaSzeY3XGMINUYdoMfC9pb+73HeA74JUaxz4BvJpfTwd+ktQmaRfpaTErgbuBymEgZnVzEjRrEBERHHn/7+OI2Fal7WLah1PsJY2/2wi8AFxKulKsJ4avSfcil5HuEfYB1gMzgVtoL57p6NhDETE9Hz8vx9OPNNh/E2ns4n2kBwCYdQmlz42ZmVnx+ErQzMwKy0nQzMwKy0nQzMwKy0nQzMwKy0nQzMwKy0nQzMwKy0nQzMwKy0nQzMwKy0nQzMwKy0nQzMwK618HhnaUGdFbbgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#a.py\n",
    "import matplotlib.pyplot as plt\n",
    "x_values=list(range(1,1001))\n",
    "y_values=[x**2 for x in x_values]\n",
    "plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,s=40)\n",
    "plt.title(\"Square numbers\",fontsize=24)\n",
    "plt.xlabel(\"value\",fontsize=24)\n",
    "plt.ylabel(\"Square of Value\",fontsize=24)\n",
    "plt.tick_params(axis='both',labelsize=14)\n",
    "plt.axis([0,1100,0,1100000])\n",
    "\n",
    "plt.show()\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
